home *** CD-ROM | disk | FTP | other *** search
/ Software 2000 / Software 2000 Volume 1 (Disc 1 of 2).iso / education / e123.dms / e123.adf / Prog.asc < prev    next >
Text File  |  1993-04-04  |  15KB  |  419 lines

  1. 'Starting to programme?  Jump in the deep end and write your own art
  2. 'package!  This may help a little.  Although there are hundreds of AMOS
  3. 'commands we only use around 30 here. It is neither efficient nor elegant
  4. 'but it should be readable and may help the odd penny to drop.
  5. '
  6. 'Absolute beginners should ensure they understand the use of loops.  Try
  7. 'writing a programme to print the numbers 1 to 10 on the screen.  We might
  8. 'write - Print 1 : Print 2 : Print 3 : Etc. This would work but we have to
  9. 'do all the tricky headwork; working out what the next number is! Better to
  10. 'get the computer to do it for you - that's what you paid for!  So we set
  11. 'up a variable called NUMBER. Think of a variable as a named box in which we
  12. 'place a value.  We use a loop to INCrement and print the value of NUMBER.
  13. 'The instructions inside a loop are carried out over and over again until
  14. 'something happens (that we have planned!) that lets us jump out of the loop.
  15. 'You are the variable NUMBER! Work through these loops & see how you change!
  16. '
  17. '   NUMBER = 0                                     NUMBER =  1
  18. '   Do                                             Do
  19. '     Inc NUMBER                 Try this one ->     Print NUMBER
  20. '     Print NUMBER               What happened?      Inc NUMBER
  21. '     Exit If NUMBER = 10                            Exit If NUMBER = 10
  22. '   Loop                                           Loop
  23. '
  24. '   Do/Loop structures are crude; we have to tell them what to do and when
  25. '          to Exit etc. We could try Repeat/Until and While/Wend loops...
  26. '              the symbol < translates as "is less than"
  27. '
  28. '   NUMBER = 0                                 NUMBER = 0
  29. '   Repeat               Checks value here ->  While NUMBER < 10
  30. '     Inc NUMBER                                 Inc NUMBER
  31. '     Print NUMBER                               Print NUMBER
  32. '   Until NUMBER = 10 <- Checks value here     Wend
  33. '
  34. '   Did you spot the difference?   It still looks like hard work to me!
  35. '   The For/Next loop will do all the work for us.  How lazy can we get?
  36. '
  37. '      For NUMBER = 1 To 10
  38. '        Print NUMBER
  39. '      Next NUMBER
  40. '
  41. '  So use the right loop for the job you are doing and save yourself time,
  42. '  effort, memory and disc space!   Be as lazy as you can!   And now....
  43. '
  44. '                ==============================================
  45. '                =        A Bare Bones Drawing Programme.     =
  46. '                =               by Duncan Moran              =
  47. '                ==============================================
  48. '
  49. '  Use MERGE ASCII (press right mouse button) to load into your AMOS editor
  50. '
  51. '   Just tart it up a bit.  Add an amusing & colourful cartoon like
  52. '   character and a jingly jangly tune and sell the lot for £25!!!!
  53. '
  54. '
  55. '
  56. '                 Anything written over here with a
  57. ' <= <= <= <= <=  ' at the start of the line is for you to read.
  58. '                 The computer only needs the lines starting on the left
  59. '                 without a ' at the start.
  60. '
  61. '
  62. '
  63. '                 Set global variables for use throughout the programme
  64. '
  65. '                   Variable Names         What they contain
  66. '                   --------------         -----------------
  67. '                 XSTARTPOS & YSTARTPOS = X & Y Start positions
  68. '                 XPOSNOW & YPOSNOW     = their position now
  69. '                                MZ     = Number of the zone on the
  70. '                                         screen at which the mouse
  71. '                                         is pointing = Mouse Zone
  72. '                 --------------------    --------------------
  73. '
  74. '
  75. Global XSTARTPOS,YSTARTPOS,XPOSNOW,YPOSNOW,MZ
  76. '
  77. '                 Start here.....
  78. '
  79. SET_IT_UP
  80. '
  81. '                 The Main Loop
  82. Do
  83.    WHICH_BUTTON
  84. Loop
  85. '
  86. '
  87. '                 That's all there is to it!  Pretty lazy eh!
  88. '                 Worth £25 of anyones money don't you think?
  89. '
  90. '
  91. '                 These are the procedures that do all the work.
  92. '
  93. Procedure SET_IT_UP
  94.    '                N.B. Computers start counting from zero.
  95.    '
  96.    '                Open screen number 0
  97.    '                     Pictures on a screen are made up from dots which
  98.    '                     are refered to as Pixels - Picture elements.
  99.    '                     Make our screen 320 pixels wide by 200 high
  100.    '                     give it 2 colours and make it low resolution.
  101.    '
  102.    '                          < 320 >
  103.    '                     ___________________       The character in the middle
  104.    '                   - :                 :       is 160 across (X direction)
  105.    '          Rows go  - :                 :       and 100 down  (Y direction)
  106.    '           across  - :        ¤        : 200
  107.    '                   - :                 :
  108.    '                     -------------------
  109.    '                      ||||||||
  110.    '                     Columns go up & down
  111.    '
  112.    '         Think how far along the R ow and then how far down the C olumn
  113.    '         Think R hubarb and C ustard!   Hope this is not too technical!
  114.    '
  115.    '
  116.    '                Nurse! The......
  117.    '
  118.    Screen Open 0,320,200,2,Lowres
  119.    '
  120.    '
  121.    '                Screen 1 will be the one we draw on
  122.    '                Screen 0 will be out of sight and used to
  123.    '                hold a copy of our drawing ready to be undone.
  124.    '
  125.    Screen Open 1,320,200,2,Lowres
  126.    '
  127.    '                Set colour 0 to white and colour 1 to black
  128.    '                Colours are made from R ed, G reen and B lue parts.
  129.    '                We tell the computer about colours like this -> $RGB.
  130.    '                Each colour can have a value from 0 to 15 denoted by
  131.    '                          0 1 2 3 4 5 6 7 8 9 A B C D E F
  132.    '                $FFF represents maximum red, blue and green = white.
  133.    '                $000 represents NO red, blue or green which = black.
  134.    '                 AMOS will not show leading 0's so this will be $0
  135.    Palette $FFF,$000
  136.    '
  137.    '                 Open a narrow (32 rows) toolbox screen
  138.    Screen Open 2,320,32,2,Lowres
  139.    '
  140.    '                 set toolbox colours to $FF0 and $00F
  141.    '                 $FF0 = maximum Red and Green No Blue = yellow
  142.    '                 $00F = NO Red or Green = just Blue.
  143.    '
  144.    '                 Compare with your photographic negatives.
  145.    '
  146.    Palette $FF0,$F
  147.    '
  148.    '                Call the procedure to make the buttons.
  149.    SET_UP_BUTTONS
  150.    '
  151. End Proc
  152. '
  153. Procedure SET_UP_BUTTONS
  154.    '
  155.    '                Set the Ink colour to colour 1 (blue)
  156.    '                and the Paper colour to colour 0 (yellow)
  157.    Ink 1,0
  158.    '                The variables UPPERLEFT, BOTTOMRIGHT & COUNTER are Local
  159.    '                Variables they have no value outside this procedure not
  160.    '                like the Global variables which hold a value throughout.
  161.    '                Top Left corner starts at position 1 (measured in Pixels)
  162.    UPPERLEFT=1
  163.    '                Bottom Right is at 53
  164.    BOTTOMRIGHT=53
  165.    '                Make space to remember where the six buttons are
  166.    Reserve Zone 6
  167.    '
  168.    '                For/Next loop.  Loops for specified number of times.
  169.    '                Loop 6 times. Each loop draws a box on the screen
  170.    '                and sets the zone to the same size. The value of COUNTER
  171.    '                starts as 1. It increases on each loop until it
  172.    '                reaches 7 which is too high & so we drop out of the loop.
  173.    '
  174.    For COUNTER=1 To 6
  175.       '
  176.       '                Draw a box/button from Top Left to Bottom Right
  177.       '                The top line of button is always 5 rows down and the
  178.       '                bottom line will be on the 25th row. Constant values.
  179.       Box UPPERLEFT,5 To BOTTOMRIGHT,25
  180.       '
  181.       '                Zone number = current value of COUNTER (1 to 6)
  182.       '                Set dimensions to the same as those of the box.
  183.       Set Zone COUNTER,UPPERLEFT,5 To BOTTOMRIGHT,25
  184.       '
  185.       '                Read the next item from the DATA list below.
  186.       '                Variable names with a $ on the end will hold a string
  187.       '                of characters contained within "inverted commas".
  188.       '                These are known as String Variables.
  189.       Read WORD$
  190.       '
  191.       '                Use UPPERLEFT to work out where to stick it
  192.       '                on the 13th row.
  193.       Text UPPERLEFT+2,13,WORD$
  194.       '
  195.       '                Shove both corners along 53 places
  196.       '                N.B. Use a colon : to seperate instructions on the
  197.       '                     same line
  198.       Add UPPERLEFT,53 : Add BOTTOMRIGHT,53
  199.       '
  200.       '                If COUNTER is not finished do next loop
  201.    Next COUNTER
  202.    '
  203.    '                   Write a couple more words to finish it off
  204.    Text 12,22," Exit" : Text 178,22,"Hand"
  205.    '
  206.    '                   The DATA list read from within the loop
  207.    Data "Wipe","Undo","Line","Free-","Square","Circle"
  208.    '
  209. End Proc
  210. '
  211. Procedure WHICH_BUTTON
  212.    '                Make the toolbox screen the one we are interested in
  213.    Screen 2
  214.    '
  215.    '                Keep checking which zone the mouse is pointing at
  216.    '                until mouse is clicked.  MZ will then hold that zone's
  217.    '                number (1 to 6).  MK will tell which Mouse button was
  218.    '                        pressed  Left = 1   Right = 2   Both = 3
  219.    '
  220.    '                Repeat/Until loop. Loops until a condition is met.
  221.    Repeat
  222.       MZ=Mouse Zone
  223.       MK=Mouse Key
  224.    Until Mouse Click
  225.  
  226.    '
  227.    '                If you're in zone 1 and pressed the right button then bye!
  228.    If MZ=1 and MK=2 Then Stop
  229.    '
  230.    '                If it's NOT Undo then copy all of drawing on to screen 0
  231.    If Not MZ=2 Then Screen Copy 1 To 0
  232.    '
  233.    '                Make the drawing screen the current screen and....
  234.    Screen 1
  235.    '                ....go and do whatever MZ was pointing at (1 to 6)
  236.    On MZ Proc WIPE,UNDO,STRAIGHT,F_HAND,SQUARE,CIRCUS
  237.    '
  238.    '                Finished here so jump back to Main Loop.
  239. End Proc
  240. '
  241. '
  242. '
  243. '                   These are the procedures that are called by selecting
  244. '                              one of the buttons on screen
  245. '
  246. Procedure WIPE
  247.    '                   Clear the Screen
  248.    Cls
  249. End Proc
  250. '
  251. Procedure UNDO
  252.    '                   Copy screen 0 back to screen 1
  253.    '                   You will not have copied the last drawing operation
  254.    '                   if you clicked on Undo (MZ=2)
  255.    Screen Copy 0 To 1
  256. End Proc
  257. '
  258. '                   N.B.  Circle, Line & Free etc. are words used by AMOS
  259. '                         so they can not be used as procedure names.
  260. '
  261. Procedure STRAIGHT
  262.    '                  Call procedure to switch button on
  263.    SWITCHEROO
  264.    '
  265.    '                  Call procedure to find the start position
  266.    MOUSEY_MOUSEY
  267.    '
  268.    '                  Gr aphic Writing changes the way things are drawn
  269.    '                  on the screen.  The number can range from 0 to 7.
  270.    '
  271.    '                  Change this to Gr Writing 1 and make nice patterns!
  272.    Gr Writing 2
  273.    '
  274.    '                  Keep switching between ink colours 0 & 1, drawing a line
  275.    '                  between start & current position until mouse is clicked.
  276.    '
  277.    '                  Do/Loop. Loops continuosly until exit condition is met.
  278.    Do
  279.       Ink 0
  280.       XPOSNOW=X Screen(X Mouse)
  281.       YPOSNOW=Y Screen(Y Mouse)
  282.       Draw XSTARTPOS,YSTARTPOS To XPOSNOW,YPOSNOW
  283.       Ink 1
  284.       Draw XSTARTPOS,YSTARTPOS To XPOSNOW,YPOSNOW
  285.       '
  286.       '                  Jump out of loop if mouse button pressed.
  287.       Exit If Mouse Click
  288.       '
  289.    Loop
  290.    '
  291.    '                   draw line in last position
  292.    Gr Writing 1
  293.    Draw XSTARTPOS,YSTARTPOS To XPOSNOW,YPOSNOW
  294.    '
  295.    '                   Switch button off
  296.    SWITCHEROO
  297. End Proc
  298. '
  299. Procedure F_HAND
  300.    '                Most of the drawing procedures are much alike
  301.    '                so see the STRAIGHT procedure for details.
  302.    '
  303.    SWITCHEROO
  304.    MOUSEY_MOUSEY
  305.    '
  306.    '                Keep drawing while a mouse key is pressed down
  307.    '                Left button = 1    Right = 2   Both together = 3
  308.    '
  309.    '                While/Wend loop. While a condition is true keep looping
  310.    While Not Mouse Key=0
  311.       XPOSNOW=X Screen(X Mouse)
  312.       YPOSNOW=Y Screen(Y Mouse)
  313.       Draw XSTARTPOS,YSTARTPOS To XPOSNOW,YPOSNOW
  314.       XSTARTPOS=XPOSNOW : YSTARTPOS=YPOSNOW
  315.    Wend
  316.    '
  317.    SWITCHEROO
  318. End Proc
  319. '
  320. Procedure SQUARE
  321.    '                Most of the drawing procedures are much alike
  322.    '                  so see the STRAIGHT procedure for details.
  323.    '
  324.    SWITCHEROO
  325.    MOUSEY_MOUSEY
  326.    Gr Writing 2
  327.    '
  328.    '                create a box .........
  329.    Do
  330.       Ink 0
  331.       XPOSNOW=X Screen(X Mouse)
  332.       YPOSNOW=Y Screen(Y Mouse)
  333.       Box XSTARTPOS,YSTARTPOS To XPOSNOW,YPOSNOW
  334.       Ink 1
  335.       Box XSTARTPOS,YSTARTPOS To XPOSNOW,YPOSNOW
  336.       Exit If Mouse Click
  337.    Loop
  338.    '
  339.    Gr Writing 1
  340.    Box XSTARTPOS,YSTARTPOS To XPOSNOW,YPOSNOW
  341.    '
  342.    SWITCHEROO
  343. End Proc
  344. '
  345. Procedure CIRCUS
  346.    '                Most of the drawing procedures are much alike
  347.    '                so see the STRAIGHT procedure for details.
  348.    '
  349.    SWITCHEROO
  350.    MOUSEY_MOUSEY
  351.    Gr Writing 2
  352.    '
  353.    '                ...... and a circle/oval
  354.    Do
  355.       Ink 0
  356.       XPOSNOW=X Screen(X Mouse)
  357.       YPOSNOW=Y Screen(Y Mouse)
  358.       '
  359.       '             Calculate the two radii
  360.       RADX=XPOSNOW-XSTARTPOS : RADY=YPOSNOW-YSTARTPOS
  361.       '
  362.       '             Change any negative values to positive
  363.       '             i.e. ABSolute value of -7 is 7
  364.       RADX = Abs(RADX) : RADY = Abs(RADY)
  365.       '
  366.       '             and we dont want zero either!
  367.       If RADX=0 Then RADX=1
  368.       If RADY=0 Then RADY=1
  369.       '
  370.       Ellipse XSTARTPOS,YSTARTPOS,RADX,RADY
  371.       Ink 1
  372.       Ellipse XSTARTPOS,YSTARTPOS,RADX,RADY
  373.       Exit If Mouse Click
  374.    Loop
  375.    '
  376.    Gr Writing 1
  377.    Ellipse XSTARTPOS,YSTARTPOS,RADX,RADY
  378.    '
  379.    SWITCHEROO
  380. End Proc
  381. '
  382. Procedure MOUSEY_MOUSEY
  383.    '
  384.    '                   Wait  for a mouse click record x & y start positions.
  385.    '                   The Mouse uses Hardware Coordinates so convert
  386.    '                   these with the X/Y Screen function to find the
  387.    '                   position on the screen.
  388.    Repeat
  389.       XSTARTPOS=X Screen(X Mouse)
  390.       YSTARTPOS=Y Screen(Y Mouse)
  391.    Until Mouse Click
  392.    '
  393.    '         Return to where you came from with the new XSTARTPOS & YSTARTPOS
  394. End Proc
  395. '
  396. Procedure SWITCHEROO
  397.    '                Switch the colours when selecting a button.
  398.    '                Switch them back again when done.
  399.    Screen 2
  400.    Gr Writing 2
  401.    '
  402.    '                Work out the top left corner of the button.
  403.    '                * means multiply.
  404.    UPPERLEFT=((MZ-1)*53)
  405.    '
  406.    '                and the bottom right one.
  407.    BOTTOMRIGHT=UPPERLEFT+53
  408.    '
  409.    '                Draw a bar over button to reverse the colours
  410.    Bar UPPERLEFT,5 To BOTTOMRIGHT,25
  411.    '
  412.    Gr Writing 1
  413.    Screen 1
  414. End Proc
  415. '
  416. '
  417. '                          That's it for now!
  418. '      Next time more tools & colours & even much more betterer too!
  419.